﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Serialization;

namespace RosarioFinanzas
{
    [XmlRoot("rss")]
    public class RSS
    {
        private RSSChannel _channel;

        public RSSChannel channel
        {
            get { return _channel; }
            set { _channel = value; }
        }

        public RSS()
        { }
    }

    public class RSSChannel
    {
        #region channel_Obligatorio
        private string _title = string.Empty;
        /// <summary>
        /// Título del canal, por ejemplo, el nombre de la web
        /// </summary>
        public string title
        {
            get { return _title; }
            set { _title = value; }
        }

        private string _link = string.Empty;
        /// <summary>
        /// Url del canal, por ejemplo http://www.subgurim.net
        /// </summary>
        public string link
        {
            get { return _link; }
            set { _link = value; }
        }

        private string _description = string.Empty;
        /// <summary>
        /// Descripción del canal, por ejemplo "Blog ASP.NET 2.0 con C# en castellano"
        /// </summary>
        public string description
        {
            get { return _description; }
            set { _description = value; }
        }
        #endregion

        #region channel_Optativo
        private string _generator = "RSS.Subgurim.NET 1.1";
        /// <summary>
        /// El software que ha generado el RSS. Por defecto "RSS.Subgurim.NET"
        /// </summary>
        public string generator
        {
            get { return _generator; }
            set { _generator = value; }
        }

        private string _language = "es";
        /// <summary>
        /// Lengua en que está escrito el rss (por defecto el español 'es')
        /// </summary>
        public string language
        {
            get { return _language; }
            set { _language = value; }
        }

        private string _ttl = "1200";
        /// <summary>
        /// Minutos que tarda el rss en actualizarse. Por defecto ponemos 20 horas
        /// </summary>
        public string ttl
        {
            get { return _ttl; }
            set { _ttl = value; }
        }


        #endregion

        #region items

        private List<RSSItem> _items = new List<RSSItem>();
        [XmlElement("item")]
        public List<RSSItem> items
        {
            get { return _items; }
            set { _items = value; }
        }

        #endregion

        public RSSChannel()
        {
            //
            // TODO: Add constructor logic here
            //
        }
    }


    /// <summary>
    /// Item particular de un rss
    /// </summary>
    public class RSSItem
    {
        private string _title = string.Empty;
        /// <summary>
        /// Título del item, por ejemplo, el nombre del artículo
        /// </summary>
        public string title
        {
            get { return _title; }
            set { _title = value; }
        }

        private string _link = string.Empty;
        /// <summary>
        /// Url del artículo (permalink), por ejemplo http://www.subgurim.net/articulo/128.aspx
        /// </summary>
        public string link
        {
            get { return _link; }
            set { _link = value; }
        }

        private string _description = string.Empty;
        /// <summary>
        /// Descripción del artículo, por ejemplo los N primero caracteres del artículo
        /// </summary>
        public string description
        {
            get { return _description; }
            set { _description = value; }
        }


        private string _guid = string.Empty;
        /// <summary>
        /// Representa un string único.
        /// </summary>
        public string guid
        {
            get
            {
                if (_guid == string.Empty)
                {
                    _guid = link;
                }
                return _guid;
            }
            set { _guid = value; }
        }

        private DateTime _pubdate_DateTime = DateTime.MinValue;
        /// <summary>
        /// Fecha en que fue escrito el artículo
        /// </summary>
        [XmlIgnore]
        public DateTime pubdate_DateTime
        {
            get
            {
                if ((_pubdate_DateTime == DateTime.MinValue) && !string.IsNullOrEmpty(_pubDate))
                    _pubdate_DateTime = Convert.ToDateTime(_pubDate);

                return _pubdate_DateTime;
            }
            set { _pubdate_DateTime = value; }
        }

        private string _pubDate = string.Empty;

        public string pubDate
        {
            get
            {
                if (string.IsNullOrEmpty(_pubDate) && (_pubdate_DateTime != DateTime.MinValue))
                    _pubDate = _pubdate_DateTime.ToString("R");

                return _pubDate;
            }
            set { _pubDate = value; }
        }

    }
}
